package com.itheima.controller;

import com.itheima.anno.Log;
import com.itheima.pojo.Emp;
import com.itheima.pojo.EmpQueryParam;
import com.itheima.pojo.PageBean;
import com.itheima.pojo.Result;
import com.itheima.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Description: EmpController 员工管理Controller
 * @Date: 2025/4/16 16:36
 **/
@Slf4j
@RequestMapping("/emps")
@RestController
public class EmpController {

    @Autowired
    private EmpService empService;

    // 无条件分页查询
    // @GetMapping
    // public Result page(@RequestParam(defaultValue = "1") Integer page,
    //                    @RequestParam(defaultValue = "10") Integer pageSize) {
    //     // 打印日志方便进行 debug
    //     log.info("查询员工信息，page={}，pageSize={}", page, pageSize);
    //     // 调用service层分页查询数据并记录
    //     PageBean pageBean = empService.page(page, pageSize);
    //     // 封装结果并返回
    //     return Result.success(pageBean);
    // }

    /**
     * 条件分页查询 ---> @RequestParam 设置默认值
     * 日期时间类型的参数接收:
     *          前端参数: yyyy-MM-dd; yyyy/MM/dd
     */
    // @GetMapping
    // public Result page(@RequestParam(defaultValue = "1") Integer page,
    //                    @RequestParam(defaultValue = "10") Integer pageSize,
    //                    String name, Integer gender,
    //                    @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
    //                    @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
    //     log.info("查询请求参数： {}, {}, {}, {}, {}, {}", page, pageSize, name, gender, begin, end);
    //     PageBean pageBean = empService.page(page, pageSize, name, gender, begin, end);
    //     return Result.success(pageBean);
    // }

    /**
     * 条件分页查询-请求参数封装
     */
    @GetMapping
    public Result page(EmpQueryParam param) {
        log.info("请求参数： {}", param);
        PageBean pageBean = empService.page(param);
        return Result.success(pageBean);
    }

    /**
     * 查询员工列表
     */
    @GetMapping("/list")
    public Result list() {
        log.info("查询员工列表");
        List<Emp> empList = empService.list();
        return Result.success(empList);
    }

    /**
     * 添加员工信息
     */
    @Log // 标记方法，用于AOP切面类代理记录操作日志
    @PostMapping
    public Result save(@RequestBody Emp emp) throws Exception {
        log.info("新增员工信息： {}", emp);
        // 调用service层保存员工信息
        empService.save(emp);
        return Result.success();
    }

    /**
     * 批量删除员工信息
     */
    @Log // 标记方法，用于AOP切面类代理记录操作日志
    @DeleteMapping
    public Result delete(@RequestParam List<Integer> ids) {
        log.info("批量删除员工信息，ids：{}", ids);
        empService.deleteByIds(ids);
        return Result.success();
    }

    /**
     * 查询回显
     * @PathVariable 声明路径参数，从URL中获取数据
     */
    @GetMapping("/{id:\\d+}")
    public Result getInfo(@PathVariable Integer id) {
        log.info("根据ID查询员工信息： {}", id);
        Emp emp = empService.getInfo(id);
        return Result.success(emp);
    }

    /**
     * 修改员工数据
     */
    @Log // 标记方法，用于AOP切面类代理记录操作日志
    @PutMapping
    public Result update(@RequestBody Emp emp) {
        log.info("修改员工数据: {}", emp);
        empService.update(emp);
        return Result.success();
    }
}
